/**
 * 
 * @param {*} arr 已排好的数组
 * @param {*} low 第一个值的索引
 * @param {*} high 最后一个值的索引
 * @param {*} key 想要查找的值
 */
function binary_search(arr, low, high, key) {
  if (low > high) {
    return -1;
  }
  var mid = parseInt((high + low) / 2);
  if (arr[mid] == key) {
    return mid;
  } else if (arr[mid] > key) {
    high = mid - 1;
    return binary_search(arr, low, high, key);
  } else if (arr[mid] < key) {
    low = mid + 1;
    return binary_search(arr, low, high, key);
  }

}

const testArr = [2, 1, 10, 8, 5, 4, 3, 9, 6, 0, -1, -2, 2 * 1, 3 * -1, 1 - 5, 7, 1.1, 1.01]
testArr.sort((a, b) => {
  return a - b
})
console.log(testArr);
console.log(binary_search(testArr, 0, testArr.length - 1, 5));

// 这种是采用递归方式，采用if方式，依次递归，找到相应的值。    []     【】
// 差别就是low和high，一个是函数传入的，一个是作为动态变量存储的

// * 优点：比较次数少，查找速度快，平均性能好。

// * 缺点：要求待查表为有序表，且插入删除困难。

// * 结论：适用于不经常变动而查找频繁的有序列表。